package api;

import com.fasterxml.jackson.databind.ObjectMapper;
import model.User;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: DELL
 * Date: 2023-03-23
 * Time: 20:35
 */

// 用于更新博客主页中的个人用户信息
@WebServlet("/sheet")
public class PrincipalSheetServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 在博客列表页加载时, 从服务器获取到当前登陆用户的信息, 并更新该信息到用户页面上
        // 包括用户的 userId 和 username, 但需要屏蔽掉用户的密码信息
        // 约定请求: GET/sheet
        // 约定响应: HTTP/ 1.1 200 OK Content-type: application/json userId:? username: ?

        // 获取用户信息, 从 session 中获取, session 中存储了登陆后的用户信息

        HttpSession session = req.getSession(false);
        ObjectMapper objectMapper = new ObjectMapper();
        //
        if (session == null) {
            // 当前会话为空, 表明为登陆
            resp.setContentType("text/html; charset = utf8");
            resp.getWriter().write("当前账户为登陆, 请重新登陆");
            resp.sendRedirect("login.html");
            return;
        }
        // 已登录状态
        // 获取会话中的 用户信息 获取的是一个 Object 类
        User user = (User) session.getAttribute("user");
        if (user == null) {
            // 对象是空的, 未登录
            resp.setContentType("text/html; charset = utf8");
            resp.getWriter().write("当前账户为登陆, 请重新登陆");
            resp.sendRedirect("login.html");
            return;
        }
        // 屏蔽掉 user 对象中的密码信息
        user.setPassword("");
        //System.out.println(user.getName());
        // 此处已经登陆了, 用户必然存在, 返回该用户即可
        resp.setContentType("application/json; charset = utf8");
        String respJson = objectMapper.writeValueAsString(user);
        resp.getWriter().write(respJson);

    }


    /*private void getUserFromSession(HttpServletRequest req, HttpServletResponse resp, int blogId) throws IOException {
        // 获取当前对话, 此时浏览器的 cookie 中已经存储了 sessionId
        // 访问博客系统其他页面时, 会将 sessionId 传给服务器, 由服务器进行到hash表中查询是否有对应的会话

        HttpSession session = req.getSession(false);
        if (session == null) {
            // 会话不存在
            resp.setStatus(403); // 拒绝访问
            // 告诉Servlet如何构造响应返回给前端
            resp.setContentType("text/html; charset = utf8");
            resp.getWriter().write("当前未登录!");
            System.out.println("会话不存在!");
            return;
        }
        // 登陆后的会话中存有 user 信息
        User user = (User) session.getAttribute("user");
        if(user == null) {
            // 用户不存在,则未登录
            resp.setStatus(403);
            resp.setContentType("text/html; charset = utf8");
            resp.getWriter().write("当前未登录!!!");
            System.out.println("用户不存在");
        }
        // 用户user获取到后, 把 user 中的密码 设置成空, 防止被他人获取
        user.setPassword("");
        ObjectMapper objectMapper = new ObjectMapper();
        String respJson = objectMapper.writeValueAsString(user);

        resp.setContentType("application/json; charset = utf8");
        resp.getWriter().write(respJson);
    }*/
}
